/**
 * @addtogroup mfc_bit_codec
 * mfc_bit_codec
 * @{
 */
/**
 * @file         mfc_bit_codec.h
 * @brief        bit操作
 * @note    
 * @author       Akee(ysk@hopechart.com)
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2020-09-09  <td>1.0                   <td>Akee            <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */
#ifndef _MFC_BIT_CODEC_H_
#define _MFC_BIT_CODEC_H_

#include "ofc/ofc_types.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * 设置对应bit位置1
 * @param addr: 内存地址
 * @param mask: 掩码
 * @par 代码示例
 * @code
    UInt32 mask = 0x03;
    UInt8 mem_value = 0x30;

    MfBitCodecSetBit(&mem_value, mask);

    // 即mask为1的bit位mem_addr都会置1
    mem_value -> 0x33;

 * @endcode
 * @return 
 */
//void MfBitCodecSetBit(UInt8 *mem_addr, UInt32 mask);

/**
 * 设置对应bit位清0
 * @param addr: 内存地址
 * @param mask: 掩码，相应bit位1进行操作
 * @par 代码示例
 * @code
    UInt32 mask = 0x03;
    UInt8 mem_value = 0x33;

    MfBitCodecClearBit(&mem_value, mask);

    mem_value -> 0x30;

 * @endcode
 * @return
 */
//void MfBitCodecClearBit(UInt8 *mem_addr, UInt32 mask);

/**
 * 设置对应索引置1
 * @param addr: 内存地址
 * @param index: 索引号，相应索引号置1操作，第一个字节的范围(0~7),第二个字节的范围(8~15)，0：表示第1个字节的0bit，23:表示第3个字节的7bit
 * @par 代码示例
 * @code
    UInt32 index = 3;
    UInt8 mem_value = 0x30;

    MfBitCodecSetIndex(&mem_value, index);

    mem_value -> 0x38;

 * @endcode
 * @note 此接口不判断内存范围，谨慎使用
 * @return
 */
void MfBitCodecSetIndex(UInt8 *mem_addr, UInt32 index);

/**
 * 设置对应索引清0
 * @param addr: 内存地址
 * @param index: 索引号，相应索引号清0操作，第一个字节的范围(0~7),第二个字节的范围(8~15)，0：表示第1个字节的0bit，23:表示第3个字节的7bit
 * @par 代码示例
 * @code
    UInt32 index = 0;
    UInt8 mem_value = 0x31;

    MfBitCodecClearIndex(&mem_value, index);

    mem_value -> 0x30;

 * @endcode
 * @note 此接口不判断内存范围，谨慎使用
 * @return
 */
void MfBitCodecClearIndex(UInt8 *mem_addr, UInt32 index);

/**
 * 设置对应位索引位翻转
 * @param addr: 内存地址
 * @param index: 索引号，相应索引位翻转操作，第一个字节的范围(0~7),第二个字节的范围(8~15)，0：表示第1个字节的0bit，23:表示第3个字节的7bit
 * @par 代码示例
 * @code
    UInt32 index = 7;
    UInt8 mem_value = 0x31;

    MfBitCodecReverseIndex(&mem_value, index);

    mem_value -> 0xB1;

 * @endcode
 * @note 此接口不判断内存范围，谨慎使用
 * @return
 */
void MfBitCodecReverseIndex(UInt8 *mem_addr, UInt32 index);

Bool MfBitCodecIndexFlag(UInt8 *mem_addr, UInt32 index);

#ifdef __cplusplus
} // extern "C" {
#endif

#endif



/**
 * @} 
 */
 
 
 


